perm filename XAP2[XAP,BGB]1 blob
sn#046319 filedate 1973-06-03 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001 VALID 00006 PAGES
C00002 00002 SUBR(MKSEG0) MAKE LINE SEGMENT. CLIPPER.
C00005 00003 SUBR(MKSEG1) MAKE LINE SEGMENT.
C00008 00004 SUBR(IIISIM) OUTPUT III BUFFER ONTO XGP.
C00010 00005 FETCH AND DECODE III COMMAND WORD.
C00012 00006 EXECUTE VECTORS.
C00015 00007 SUBR(VIDEO)
C00018 ENDMK
C⊗;
SUBR(MKSEG0) MAKE LINE SEGMENT. CLIPPER.
BEGIN MKSEG0;_____________________________________________________
ACCUMULATORS{R1,C1,R2,C2,Q,N}
;TEST FOR EASY OUTSIDER.
LAC Q,C1↔LAC N,C2↔CAMLE C1,C2↔EXCH Q,N
CAIG Q,=1727↔SKIPGE N↔POP0J
LAC Q,R1↔LAC N,R2↔CAMLE R1,R2↔EXCH Q,N
CAMG Q,QHI↔CAMGE N,QLO↔POP0J
;TEST FOR EASY INSIDER.
JUMPL C1,L1↔JUMPL C2,L1
CAILE C1,=1727↔GO L1↔CAILE C2,=1727↔GO L1
CAMLE R1,QHI↔GO L1↔CAMLE R2,QHI↔GO L1
CAMGE R1,QLO↔GO L1↔CAMGE R2,QLO↔GO L1↔GO MKSEG1 ;DISPLAY.
;TEST FOR AND HANDLE SIMPLE CASES.
L1: CAMN R1,R2↔GO[
CAMN C1,C2↔POP0J↔GO HSEG]
CAMN C1,C2↔GO VSEG
;MIDPOINT THE HARD CASE.
PUSH P,R1↔PUSH P,C1 ;SAVE 1ST END.
ADD R1,R2↔ASH R1,-1 ;MIDPOINT THE LINE SEGMENT.
ADD C1,C2↔ASH C1,-1
;TEST FOR MIDPOINT AND 1ST END BEING COINCIDANT.
CAMN R1,-1(P)↔GO[
CAME C1, 0(P)↔GO .+1↔POP P,C1↔POP P,R1↔POP0J]
;RECURSION - DISPLAY ONE HALF AND THEN DISPLAY THE OTHER.
CALL(MKSEG0) ;MIDPOINT TO 2ND END.
LAC R2,-1(P)↔LAC C2,0(P)
CALL(MKSEG0) ;MIDPOINT TO 1ST END.
POP P,C1↔POP P,R1↔POP0J
;DISPLAY HORIZONTAL LINE SEGMENT FROM (C1 MIN C2) TO (C1 MAX C2).
HSEG: LAC Q,C1↔LAC N,C2↔CAML C1,C2↔EXCH N,Q
SKIPGE Q↔SETZ Q,↔CAILE N,=1727↔LACI N,=1727↔SUB N,Q
DOT(R1,Q)↔SKIPA↔IDPB 0,1↔SOJG N,.-1↔POP0J
;DISPLAY VERTICAL LINE SEGMENT FROM (R1 MIN R2) TO (R1 MAX R2).
VSEG: LAC Q,R1↔LAC N,R2↔CAML R1,R2↔EXCH N,Q
CAMGE Q,QLO↔LAC Q,QLO↔CAMLE N,QHI↔LAC N,QHI↔SUB N,Q
DOT(Q,C1)↔ADDI 1,WWIDTH
SOJG N,.-2↔POP0J
BEND MKSEG0;BGB 24 APRIL 1973.____________________________________
SUBR(MKSEG1) MAKE LINE SEGMENT.
COMMENT / Recursive midpoint method of quantizing a line segment.
Arguments are expected in accumulators R1, C1, R2, C2; the bit
is deposited from accumulator 0./
BEGIN MKSEG1;_____________________________________________________
ACCUMULATORS{R1,C1,R2,C2,Q,N}
;TEST FOR AND HANDLE SIMPLE CASES.
CAMN R1,R2↔GO[
CAMN C1,C2↔GO[DOT(R1,C1)↔POP0J]↔GO HSEG]
CAMN C1,C2↔GO VSEG
;MIDPOINT THE HARD CASE.
PUSH P,R1↔PUSH P,C1 ;SAVE 1ST END.
ADD R1,R2↔ASH R1,-1 ;MIDPOINT THE LINE SEGMENT.
ADD C1,C2↔ASH C1,-1
;TEST FOR MIDPOINT AND 1ST END BEING COINCIDANT.
CAMN R1,-1(P)↔GO[
CAME C1, 0(P)↔GO .+1↔POP P,C1↔POP P,R1
DOT(R1,C1)↔DOT(R2,C2)↔POP0J]
;RECURSION - DISPLAY ONE HALF AND THEN DISPLAY THE OTHER.
CALL(MKSEG1) ;MIDPOINT TO 2ND END.
LAC R2,-1(P)↔LAC C2,0(P)
CALL(MKSEG1) ;MIDPOINT TO 1ST END.
POP P,C1↔POP P,R1↔POP0J
;DISPLAY HORIZONTAL LINE SEGMENT FROM (C1 MIN C2) TO (C1 MAX C2).
HSEG: LAC Q,C1↔LAC N,C2
CAML C1,C2↔EXCH N,Q↔SUB N,Q
DOT(R1,Q)↔SKIPA↔IDPB 0,1
SOJG N,.-1↔POP0J
;DISPLAY VERTICAL LINE SEGMENT FROM (R1 MIN R2) TO (R1 MAX R2).
VSEG: LAC Q,R1↔LAC N,R2
CAML R1,R2↔EXCH N,Q↔SUB N,Q
DOT(Q,C1)↔ADDI 1,WWIDTH
SOJG N,.-2↔POP0J
BEND MKSEG1;BGB 24 APRIL 1973.____________________________________
SUBR(IIISIM) OUTPUT III BUFFER ONTO XGP.
BEGIN IIISIM______________________________________________________
;DELTA ORIGIN DISPLACEMENT.
SLACI 1,(2B2)↔LAC CHAR
CAIN"*"↔SETZ 1,↔DAC 1,DELTA#
;III FILE NAME.
CALL(GETFIL)
INIT 17,17↔SIXBIT/DSK/↔0
GO[FATAL(CAN'T INIT DSK)]
LOOKUP 17,FILNAM↔GO[LAC[SIXBIT/PLT/]↔DAC EXTION
LOOKUP 17,FILNAM↔GO[LAC[SIXBIT/III/]↔DAC EXTION
LOOKUP 17,FILNAM↔GO[LAC[SIXBIT/DAT/]↔DAC EXTION
LOOKUP 17,FILNAM↔GO FRET↔GO L0]↔GO L0]↔GO L0]
;EXPAND CORE FOR DUMP INPUT.
L0: LAC JOBREL↔DAC OLD44#
NIP 1,PPPN↔MOVN 1,1
ADD 1,JOBREL↔DAC 1,BUFEND#
CORE 1,↔GO[FATAL(CAN'T EXPAND CORE)]
;SAVE CURRENT BEAM POSITION.
LAC COL↔DAC BEGCOL#
LAC ROW↔DAC BEGROW#
;DUMP III FILE IN.
LAC OLD44↔ADDM PPPN↔IN 17,PPPN
LAC 1,OLD44↔LAC(1)↔CAMN[-1]↔GO VIDEO
LAC 1,OLD44↔ADDI 1,2↔DAC 1,PC# ;III PC.
L1: CDR 1,BUFEND↔DZM -1(1)↔DZM(1)
CAML 1,JOBREL↔GO .+3
LIPI 1,-1(1)↔BLT 1,JOBREL ;CLEAR TOP.
;FETCH AND DECODE III COMMAND WORD.
ILOOP: AOSA 1,PC
LOOP: LAC 1,PC↔CAMLE 1,JOBFF
CAML 1,BUFEND↔GO RET
LAC 2,(1)
TRNE 2,01↔GO XTEXT ;TEXT COMMAND WORD.
TRNE 2,02↔GO XVECTR ;VECTOR COMMAND WORD.
TRNE 2,20↔GO XCTRL ;III CONTROL WORD.
TRNE 2,37↔GO ILOOP ;NOP & HALT COMMANDS.
RET: LAC OLD44↔CORE↔GO[FATAL(CAN'T SHRINK CORE!)]
FRET: RELEASE 17,
LAC BEGCOL↔DAC COL
LAC BEGROW↔DAC ROW
POP0J
;EXECUTE III TEXT.
XTEXT: PUSH P,2 ;-2(P)
PUSH P,[5] ;-1(P)
PUSH P,[POINT 7,-2(P)] ; 0(P)
CLOOP: ILDB 1,0(P)
JUMPE 1,CCONT
CAIN 1,15↔GO[LAC -4(P)↔DAC COL↔GO CCONT]
DAC 1,CHAR
CALL(PRINT)
CCONT: SOSLE -1(P)↔GO CLOOP
SUB P,[XWD 3,3]
GO ILOOP
;EXECUTE III CONTROL OPERATIONS.
XCTRL: TRNN 2,04↔GO[CAR 1,2↔DAC 1,PC↔GO LOOP] ;JUMP.
TRNE 2,40↔GO LOOP ;SAVE A NOP HERE
AOS 1,PC ;JSR
HRLI 1,20
CAR 2,2
CAMLE 2,JOBFF
CAML 2,BUFEND↔GO[ OUTSTR[ASCIZ/JSR OUT OF BOUNDS
/]↔ GO RET]
DAC 1,(2)↔DAC 2,PC
GO ILOOP
;EXECUTE VECTORS.
XVECTR: TRNN 2,4
GO [TRNN 2,10 ;SHORT VECTOR OR TSS
GO SVECT ;SHORT VECTOR
GO ILOOP] ;TSS
LDB [POINT 11,2,10]↔ROT -13 ;X
ADD DELTA↔MUL IIIDX↔PUSH P,0
LDB [POINT 11,2,21]↔ROT -13↔MOVNS ;Y
ADD DELTA↔MUL IIIDY↔PUSH P,0
LDB 1,[POINT 3,2,31]
PUSHJ P,@PLOTAB(1)
GO ILOOP
SVECT: PUSH P,2
LDB [POINT 7,2,6]↔ROT -7
ADD DELTA↔MUL IIIDX↔PUSH P,0 ;X
LDB [POINT 7,2,13]↔ROT -7↔MOVN
ADD DELTA↔MUL IIIDY↔PUSH P,0 ;Y
LDB 1,[POINT 2,2,15]
PUSHJ P,@PLOTAB(1)
POP P,2
LDB [POINT 7,2,22]↔ROT -7
ADD DELTA↔MUL IIIDX↔PUSH P,0 ;X
LDB [POINT 7,2,29]↔ROT -7↔MOVN
ADD DELTA↔MUL IIIDY↔PUSH P,0 ;
LDB 1,[POINT 2,2,31]
PUSHJ P,@PLOTAB(1)
GO ILOOP
PLOTAB: [RVECT: CALL(RELATE)↔CALL(PLTVEC,1,2)↔POP2J]
[RPNT: CALL(RELATE)↔DAC 1,COL↔DAC 2,ROW↔GO PLTVEC]
[RIVECT: CALL(RELATE)↔DAC 1,COL↔DAC 2,ROW↔POP2J]
RPNT
[AVECT: CALL(ABSOLUTE)↔GO PLTVEC] ;ARGS ARE ALREADY STACKED
[APNT: CALL(ABSOLUTE)↔DAC 1,COL↔DAC 2,ROW↔GO PLTVEC]
[AIVECT: CALL(ABSOLUTE)↔DAC 1,COL↔DAC 2,ROW↔POP2J]
APNT
RELATE: SKIPE DELTA↔MOVSI -200000↔MUL IIIDX
LAC 1,0↔ADD 1,COL↔ADDB 1,-3(P)
SKIPE DELTA↔MOVSI -200000↔MUL IIIDY
LAC 2,0↔ADDB 2,-2(P)↔ADD 1,ROW
POP0J
ABSOLU: LAC 1,BEGCOL↔ADDB 1,-3(P)
LAC 2,BEGROW↔ADDB 2,-2(P)
POP0J
BEND;2/8/73/(TVR)21 MAY 1973(BGB)---------------------------------
PLTVEC: SETO↔LAC 2,ROW↔LAC 3,COL↔LAC 4,ARG1↔LAC 5,ARG2
DAC 4,ROW↔DAC 5,COL↔CALL(MKSEG0)↔POP2J
SUBR(VIDEO)
BEGIN VIDEO;_________________________________________________________
ACCUMULATORS{S2,S3,I,J,K,Q,P1,P2,R,C,TV}
COMMENT⊗ VIDEO FILE HEADER:
0 -1
1 6 BITS PER BYTE.
2 =48 WORDS PER ROW.
3 R1
4 R2
5 C1
6 C2
7 -WC,,ADR ⊗
;EXPECT AC-1 TO CONTAIN POINTER TO WORD ZERO OF VIDEO FILE IN CORE.
LAC TV,1↔LAC 2(TV)↔DAC TVWIDTH#
LAC 4(TV)↔SUB 3(TV)↔AOS↔DAC TVROWS#↔DZM TVROW0#
LAC 6(TV)↔SUB 5(TV)↔AOS↔DAC TVCOLS#
LAC R,ROW↔TRZ R,3 ;UPPER LEFT MOST CORNER OF IMAGE.
CAMLE R,QHI↔POP0J ;WHOLE VIDEO IMAGE BELOW THIS QPAGE.
CAML R,QLO↔GO L0 ;VIDEO IMAGE STARTS ON THIS QPAGE.
;VIDEO IMAGE STARTS BEFORE THIS QUARTER PAGE.
L00: SUB R,QLO↔ASH R,-2
MOVM R,R↔DAC R,TVROW0#
CAML R,TVROWS↔POP0J ;WHOLE VIDEO IMAGE ABOVE THIS QPAGE.
SUB R,TVROWS
DACM R,TVROWS↔LAC R,QLO
;VIDEO BYTE POINTER.
L0: LAC P1,1(TV) ;BYTE SIZE.
IORI P1,4400↔ROT P1,-=12
LAP P1,7(TV)↔ADD P1,1 ;ORIGIN OF VIDEO IN CORE.
LAC TVROW0↔IMUL TVWIDTH↔ADD P1,0
;POINTER INTO XGP BUFFER.
LAC C,COL
HLLZ 1,%(C)↔ROT 1,6
HRRI 1,@%(R)↔CDR P2,1
;J = COLUMNS/9 9 4-BIT XGP BYTES PER WORD.
LACI J,=36↔IDIV J,1(TV)
IMUL J,2(TV)↔IDIVI J,=9↔DAC J,JSAV# ;COLUMNS/9
LAC I,TVROWS
L1: DAC P2,P2SAV#↔LAC J,JSAV
L2: SETZB 0,1↔SETZB 2,3↔LACI K,=9
L3: ILDB Q,P1
TRZ Q,3↔ROTC 0,4↔ROTC 2,4
IOR 0,HTT+0(Q)↔IOR 1,HTT+1(Q)
IOR 2,HTT+2(Q)↔IOR 3,HTT+3(Q)↔SOJG K,L3
CAIL C,=1728↔GO L4
IORM 0,0*WWIDTH(P2)↔IORM 1,1*WWIDTH(P2)
IORM 2,2*WWIDTH(P2)↔IORM 3,3*WWIDTH(P2)
L4: AOS P2↔SOJG J,L2
ADDI R,4↔CAMLE R,QHI↔POP0J
LAC P2,P2SAV↔ADDI P2,4*WWIDTH
SOJG I,L1
POP0J
;HALF TONE TABLE.
HTT: 6↔7↔7↔6↔ 6↔6↔7↔6↔ 6↔6↔6↔6↔ 6↔6↔6↔6
6↔6↔6↔4↔ 4↔6↔6↔4↔ 4↔6↔6↔4↔ 4↔4↔6↔4
4↔4↔4↔4↔ 4↔4↔4↔4↔ 0↔4↔4↔4↔ 4↔4↔4↔0
0↔4↔4↔0↔ 0↔0↔4↔0↔ 0↔0↔4↔0↔ 0↔0↔0↔0
BEND VIDEO;BGB 2 JUNE 1973.__________________________________________